<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        var a = 1;
        var b = 2[a, b] = [b, a];
        console.log("a的值" + a);
        console.log("b的值" + b);

        // a = 1
        // b = [undefined, 1]
        // 解析:
        //     本道题涉及的内容有对象， 逗号运算符， 包装类, 首先回顾一下对象
        // 的增加属性和修改属性的方式
        // let obj = {}
        // obj.name = 'dxb'
        // obj['sex'] = 'none'
        // 这两种方式， 大家都能懂, 接下来， 难度加深一 - 点
        // obj[1, 2] = 3
        // 这么写大家没见过， 以为会报错, 但是并没有。 这里面涉及到一个
        // 叫做逗号运算符， 逗号运算符配合着小括号 - 起使用
        // let a = (1, 2)
        // //a=2
        // a = (1, 2, 3)
        // //a=3
        // 说白了， 逗号运算符就是把最后面的值返回， 同样对于obj[1, 2] 来说
        // 也是 - -样的obj[1, 2] = 3 等价obj[(1, 2)] = 3 等价于obj[2] = 3
        // 类比我们刚才的2[a, b] 可以转化为2[1, undefined]， 这时候b按照预
        // 编译来说。 仅仅是声明了， 值还是undefined
        // 2[1, undefined] = [Undefined, 1] 为什么不报错。
        // 这个是大家比较关注的问题
        //     '123'.length这个大家都会， 字符串类型的对象， 经过包装类进行
        // 包装， 可以调用length属性
        //     '123'
        // length] 这种方式也是可以的
        //     '123' [1, 'length'] 也是可以的 '123' [1, 'length'] = [1, 2] 赋值也是可以的
        // 对于数字来说也是一样的,
        // 2[1, undefined] = [undefined, 1] 也是可以的
        // 首先num = new Number(2)
        // num[1, undefined] = [undefined, 1]
        // num[undefined] = [undefined, 1]
        // 最后的b = 2[a, b] = [b, a]
        // 他三个连等b = [b, a] = [undefined, 1]
    </script>
</body>

</html>